#pragma once
#include "ODRoadGeom.h"
#include "../pugixml/pugixml.hpp"

namespace ODRoadGeom
{
    class FOpenDriveImporter
    {
    public:
        FOpenDriveImporter( const wchar_t* filename, double unitscale, ODSystem& OpenDriveSystem );

    private:
        void        ImportRoot(const pugi::xml_node& XmlRootNode, ODSystem& OpenDriveSystem);

        // import road
        void        ImportRoad(const pugi::xml_node& XmlRoadNode,ODSystem& OpenDriveSystem);
        void        ImportRoadLink(ODRoadPtr road, const pugi::xml_node& xmlNode);
        void        ImportPlanView(ODRoadPtr road, const pugi::xml_node& xmlNode);
        void        ImportElevation(ODRoadPtr road, const pugi::xml_node& xmlNode);
        void        ImportLaneGroup(ODRoadPtr road, const pugi::xml_node& xmlNode);
        void        ImportLaneSection(ODLaneSectionPtr ls, const pugi::xml_node& xmlNode);
        void        ImportLane(ODLaneSectionPtr ls, const pugi::xml_node& xmlNode);
        void        ImportLaneDetail(ODLanePtr lane, const pugi::xml_node& xmlNode);
        void        ImportSignals(ODRoadPtr road, const pugi::xml_node& xmlNode, ODSystem& OpenDriveSystem);

        // import Controller
        void        ImportController(const pugi::xml_node& XmlRoadNode,ODSystem& OpenDriveSystem);
        void        ImportControl(ODControllerPtr odctrl, const pugi::xml_node& XmlRoadNode);

        // import junction
        void        ImportJunction(const pugi::xml_node& XmlRoadNode,ODSystem& OpenDriveSystem);
        void        ImportConnection(ODConnectionPtr conn, const pugi::xml_node& xmlNode);

    private:
        double                  UnitScale;
    };
}